﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Text;

namespace Sinacor.Tools.Dado
{
    public class TextoMensagem : DadoBase<Entidade.TraducaoMensagem>
    {
        public override void incluir(Sinacor.Tools.Entidade.TraducaoMensagem entidade)
        {
            string sql = string.Format("INSERT INTO TFWDTXT_MSG ("
                                                        +" COD_TXT_MSG"
                                                        +",CODIGOIDIOMA"
                                                        +",TXT_MSG"
                                                        +",COD_USUA_LOGN) "
                                                    +"VALUES ("
                                                        +" {0}"
                                                        +",{1}"
                                                        +",'{2}'"
                                                        +",'{3}')",            
            entidade.IdMensagem, entidade.Idioma.Id, entidade.MensagemTraduzida, entidade.UsuarioLogado);

            ResourceAccess<Sinacor.Tools.Entidade.TraducaoMensagem> dados = new ResourceAccess<Sinacor.Tools.Entidade.TraducaoMensagem>();
            using (IDbCommand cmd = dados.getCommand(sql, CommandType.Text))
            {
                cmd.ExecuteNonQuery();
                cmd.Connection.Close();
            }
        }

        public override void alterar(Sinacor.Tools.Entidade.TraducaoMensagem entidade)
        {
            string sql = string.Format("UPDATE TFWDTXT_MSG "
                                              +"SET TXT_MSG = '{0}'"
                                              +",COD_USUA_LOGN = '{1}' "
                                      +"WHERE COD_TXT_MSG = {2} "
                                      +"AND CODIGOIDIOMA = {3}",
                entidade.MensagemTraduzida.Trim(), entidade.UsuarioLogado, entidade.IdMensagem, entidade.Idioma.Id);

            ResourceAccess<Sinacor.Tools.Entidade.TraducaoMensagem> dados = new ResourceAccess<Sinacor.Tools.Entidade.TraducaoMensagem>();
            using (IDbCommand cmd = dados.getCommand(sql, CommandType.Text))
            {
                cmd.ExecuteNonQuery();
                cmd.Connection.Close();
            }
        }
     
        public override void deletar(Sinacor.Tools.Entidade.TraducaoMensagem entidade)
        {
            string sql = string.Format("DELETE FROM TFWDTXT_MSG WHERE COD_TXT_MSG = {0} AND CODIGOIDIOMA = {1}", entidade.IdMensagem, entidade.Idioma.Id);
            
            ResourceAccess<Sinacor.Tools.Entidade.TraducaoMensagem> dados = new ResourceAccess<Sinacor.Tools.Entidade.TraducaoMensagem>();
            using (IDbCommand cmd = dados.getCommand(sql, CommandType.Text))
            {
                cmd.ExecuteNonQuery();
                cmd.Connection.Close();
            }
        }
        
        public override List<Sinacor.Tools.Entidade.TraducaoMensagem> consultar(Sinacor.Tools.Entidade.TraducaoMensagem tipoMensagem)
        {
            throw new NotImplementedException();
        }

        public int? consultaID(Entidade.TraducaoMensagem entidade)
        {
            int? retorno = null;
            string sql = string.Format("SELECT COD_TXT_MSG FROM TFWDTXT_MSG WHERE (UPPER(TXT_MSG) = '{0}') AND CODIGOIDIOMA = {1}", entidade.MensagemTraduzida.Trim().ToUpper(), entidade.Idioma.Id);

            ResourceAccess<Sinacor.Tools.Entidade.TraducaoMensagem> dados = new ResourceAccess<Sinacor.Tools.Entidade.TraducaoMensagem>();
            using (IDbCommand cmd = dados.getCommand(sql, CommandType.Text))
            {
                object res = cmd.ExecuteScalar();
                if (res != null)
                {
                    retorno = Convert.ToInt32(cmd.ExecuteScalar());
                }
                else
                {
                    retorno = null;
                }
                cmd.Connection.Close();
            }

            return retorno;
        }

        public int? consulta(Entidade.TraducaoMensagem entidade)
        {
            int? retorno = null;
            string sql = string.Format("SELECT COD_TXT_MSG FROM TFWDTXT_MSG WHERE (UPPER(TXT_MSG) = '{0}') AND CODIGOIDIOMA = {1}", entidade.MensagemTraduzida.Trim().ToUpper(), entidade.Idioma.Id);

            ResourceAccess<Sinacor.Tools.Entidade.Mensagem> dados = new ResourceAccess<Sinacor.Tools.Entidade.Mensagem>();
            using (IDbCommand cmd = dados.getCommand(sql, CommandType.Text))
            {
                object res = cmd.ExecuteScalar();
                if (res != null)
                {
                    retorno = Convert.ToInt32(cmd.ExecuteScalar());
                }
                else
                {
                    retorno = null;
                }
                cmd.Connection.Close();
            }

            return retorno;
        }

        public object jaEstaCadastrada(Entidade.TraducaoMensagem entidade)
        {
            object retorno = null;
            string sql = string.Format("SELECT 1 FROM TFWDTXT_MSG WHERE (UPPER(TXT_MSG) = '{0}') AND CODIGOIDIOMA = {1}", entidade.MensagemTraduzida.Trim().ToUpper(), entidade.Idioma.Id);

            ResourceAccess<Sinacor.Tools.Entidade.Mensagem> dados = new ResourceAccess<Sinacor.Tools.Entidade.Mensagem>();
            using (IDbCommand cmd = dados.getCommand(sql, CommandType.Text))
            {

                retorno = cmd.ExecuteScalar();
                if (retorno == DBNull.Value)
                    retorno = null;
                cmd.Connection.Close();
            }
            return retorno;
        }

        public object jaEstaCadastradaIdenticamente(Entidade.TraducaoMensagem entidade)
        {
            object retorno = null;
            string sql = string.Format("SELECT 1 FROM TFWDTXT_MSG WHERE TXT_MSG = '{0}'", entidade.MensagemTraduzida.Trim().ToUpper());

            ResourceAccess<Sinacor.Tools.Entidade.Mensagem> dados = new ResourceAccess<Sinacor.Tools.Entidade.Mensagem>();
            using (IDbCommand cmd = dados.getCommand(sql, CommandType.Text))
            {

                retorno = cmd.ExecuteScalar();
                if (retorno == DBNull.Value)
                    retorno = null;
                cmd.Connection.Close();
            }
            return retorno;
        }

        public object verificaDependencia(Sinacor.Tools.Entidade.TraducaoMensagem entidade)
        {
            object retorno = null;
            string sql = string.Format("SELECT 1 "
                                     +" FROM TFWDTRADUCAOMENSAGEM "
                                     +" INNER JOIN TFWDTXT_MSG ON TFWDTRADUCAOMENSAGEM.COD_TXT_MSG = TFWDTXT_MSG.COD_TXT_MSG "
                                     +" WHERE TFWDTXT_MSG.COD_TXT_MSG = {0} " 
                                     +" AND TFWDTXT_MSG.CODIGOIDIOMA  = {1}", entidade.IdMensagem, entidade.Idioma.Id);

            ResourceAccess<Sinacor.Tools.Entidade.TraducaoMensagem> dados = new ResourceAccess<Sinacor.Tools.Entidade.TraducaoMensagem>();
            using (IDbCommand cmd = dados.getCommand(sql, CommandType.Text))
            {
                retorno = cmd.ExecuteScalar();
                if (retorno == DBNull.Value)
                    retorno = null;
                cmd.Connection.Close();
            }

            return retorno;
        }

    }
}
